home *** CD-ROM | disk | FTP | other *** search
/ Computer Select (Limited Edition) / Computer Select.iso / dobbs / v17n03 / dflt10.exe / APPLICAT.C next >
Encoding:
C/C++ Source or Header  |  1991-12-21  |  15.3 KB  |  635 lines

  1. /* ------------- applicat.c ------------- */
  2.  
  3. #include "dflat.h"
  4.  
  5. static int ScreenHeight;
  6.  
  7. extern DBOX Display;
  8. extern DBOX Windows;
  9.  
  10. #ifdef INCLUDE_LOGGING
  11. extern DBOX Log;
  12. #endif
  13.  
  14. #ifdef INCLUDE_SHELLDOS
  15. static void ShellDOS(WINDOW);
  16. #endif
  17. static void CreateMenu(WINDOW);
  18. static void CreateStatusBar(WINDOW);
  19. static void SelectColors(WINDOW);
  20. static void SetScreenHeight(int);
  21.  
  22. #ifdef INCLUDE_WINDOWOPTIONS
  23. static void SelectTexture(void);
  24. static void SelectBorder(WINDOW);
  25. static void SelectTitle(WINDOW);
  26. static void SelectStatusBar(WINDOW);
  27. #endif
  28.  
  29. static void SelectLines(WINDOW);
  30. static int DisplayModified;
  31.  
  32. #ifdef INCLUDE_MULTI_WINDOWS
  33. static void CloseAll(WINDOW);
  34. static void MoreWindows(WINDOW);
  35. static void ChooseWindow(WINDOW, int);
  36. #endif
  37.  
  38. int ApplicationProc(WINDOW wnd, MESSAGE msg, PARAM p1, PARAM p2)
  39. {
  40.     int rtn, WasVisible;
  41.     static int AltDown = FALSE;
  42.  
  43.     switch (msg)    {
  44.         case CREATE_WINDOW:
  45.             ScreenHeight = SCREENHEIGHT;
  46.             if (!LoadConfig())
  47.                 cfg.ScreenLines = ScreenHeight;
  48.             if (!isVGA() && !DisplayModified)    {
  49.                 /* ---- modify Display Dialog Box for EGA, CGA ---- */
  50.                 CTLWINDOW *ct, *ct1;
  51.                 int i;
  52.                 ct = FindCommand(&Display, ID_OK, BUTTON);
  53.                 if (isEGA())
  54.                     ct1 = FindCommand(&Display, ID_50LINES, RADIOBUTTON);
  55.                 else    {
  56.                     CTLWINDOW *ct2;
  57.                     ct2 = FindCommand(&Display, ID_COLOR, RADIOBUTTON) - 1;
  58.                     ct2->dwnd.w++;
  59.                     for (i = 0; i < 7; i++)
  60.                         (ct2+i)->dwnd.x += 8;
  61.                     ct1 = FindCommand(&Display, ID_25LINES, RADIOBUTTON) - 1;
  62.                 }
  63.                 for (i = 0; i < 4; i++)
  64.                     *ct1++ = *ct++;
  65.                 DisplayModified = TRUE;
  66.             }
  67. #ifdef INCLUDE_WINDOWOPTIONS
  68.             if (cfg.Border)
  69.                 SetCheckBox(&Display, ID_BORDER);
  70.             if (cfg.Title)
  71.                 SetCheckBox(&Display, ID_TITLE);
  72.             if (cfg.StatusBar)
  73.                 SetCheckBox(&Display, ID_STATUSBAR);
  74.             if (cfg.Texture)
  75.                 SetCheckBox(&Display, ID_TEXTURE);
  76. #endif
  77.             if (cfg.mono == 1)
  78.                 PushRadioButton(&Display, ID_MONO);
  79.             else if (cfg.mono == 2)
  80.                 PushRadioButton(&Display, ID_REVERSE);
  81.             else
  82.                 PushRadioButton(&Display, ID_COLOR);
  83.             if (cfg.ScreenLines == 25)
  84.                 PushRadioButton(&Display, ID_25LINES);
  85.             else if (cfg.ScreenLines == 43)
  86.                 PushRadioButton(&Display, ID_43LINES);
  87.             else if (cfg.ScreenLines == 50)
  88.                 PushRadioButton(&Display, ID_50LINES);
  89.             if (SCREENHEIGHT != cfg.ScreenLines)    {
  90.                 SetScreenHeight(cfg.ScreenLines);
  91.                 if (WindowHeight(wnd) == ScreenHeight ||
  92.                         SCREENHEIGHT-1 < GetBottom(wnd))    {
  93.                     WindowHeight(wnd) = SCREENHEIGHT-1;
  94.                     GetBottom(wnd) = GetTop(wnd)+WindowHeight(wnd)-1;
  95.                     wnd->RestoredRC = WindowRect(wnd);
  96.                 }
  97.             }
  98.             SelectColors(wnd);
  99. #ifdef INCLUDE_WINDOWOPTIONS
  100.             SelectBorder(wnd);
  101.             SelectTitle(wnd);
  102.             SelectStatusBar(wnd);
  103. #endif
  104.             rtn = BaseWndProc(APPLICATION, wnd, msg, p1, p2);
  105.             if (wnd->extension != NULL)
  106.                 CreateMenu(wnd);
  107.             CreateStatusBar(wnd);
  108.             LoadHelpFile();
  109.             SendMessage(NULL, SHOW_MOUSE, 0, 0);
  110.             return rtn;
  111.         case ADDSTATUS:
  112.             if (wnd->StatusBar != NULL)    {
  113.                 if (p1 && *(char *)p1)
  114.                     SendMessage(wnd->StatusBar, SETTEXT, p1, p2);
  115.                 else 
  116.                     SendMessage(wnd->StatusBar, CLEARTEXT, 0, 0);
  117.                 SendMessage(wnd->StatusBar, PAINT, 0, 0);
  118.             }
  119.             return TRUE;
  120.         case SETFOCUS:
  121.             if ((int)p1 == (inFocus != wnd))    {
  122.                 /* ---- setting/clearing focus ------ */
  123.                 if ((int)p1)
  124.                     SendMessage(inFocus, SETFOCUS, FALSE, 0);
  125.                 /* remove window from list */
  126.                 RemoveFocusWindow(wnd);
  127.                 /* move window to end/beginning of list */
  128.                 p1 ? AppendFocusWindow(wnd) : PrependFocusWindow(wnd);
  129.                 inFocus = p1 ? wnd : NULL;
  130.                 SendMessage(wnd, BORDER, 0, 0);
  131.                 return TRUE;
  132.             }
  133.             break;
  134.         case SIZE:
  135.             WasVisible = isVisible(wnd);
  136.             if (WasVisible)
  137.                 SendMessage(wnd, HIDE_WINDOW, 0, 0);
  138.             if (p1-GetLeft(wnd) < 30)
  139.                 p1 = GetLeft(wnd) + 30;
  140.             BaseWndProc(APPLICATION, wnd, msg, p1, p2);
  141.             CreateMenu(wnd);
  142.             CreateStatusBar(wnd);
  143.             if (WasVisible)
  144.                 SendMessage(wnd, SHOW_WINDOW, 0, 0);
  145.             return TRUE;
  146. #ifdef INCLUDE_MINIMIZE
  147.         case MINIMIZE:
  148.             return TRUE;
  149. #endif
  150.         case KEYBOARD:
  151.             AltDown = FALSE;
  152.             if (WindowMoving || WindowSizing)
  153.                     return BaseWndProc(APPLICATION, wnd, msg, p1, p2);
  154.             switch ((int) p1)    {
  155.                 case F1:
  156.                     return BaseWndProc(APPLICATION, wnd, msg, p1, p2);
  157.                 case ALT_F4:
  158.                     PostMessage(wnd, CLOSE_WINDOW, 0, 0);
  159.                     return TRUE;
  160. #ifdef INCLUDE_MULTI_WINDOWS
  161.                 case ALT_F6:
  162.                     SetNextFocus(inFocus);
  163.                     SkipSystemWindows(FALSE);
  164.                     return TRUE;
  165. #endif
  166.                 case ALT_HYPHEN:
  167.                     BuildSystemMenu(wnd);
  168.                     return TRUE;
  169.                 default:
  170.                     break;
  171.             }
  172.             PostMessage(wnd->MenuBarWnd, msg, p1, p2);
  173.             return TRUE;
  174.         case SHIFT_CHANGED:
  175.             if ((int)p1 & ALTKEY)
  176.                 AltDown = TRUE;
  177.             else if (AltDown)    {
  178.                 AltDown = FALSE;
  179.                   SendMessage(wnd->MenuBarWnd, KEYBOARD,
  180.                       wnd->MenuBarWnd == inFocus ? ESC : F10, 0);
  181.             }
  182.             return TRUE;
  183.         case PAINT:
  184.             if (isVisible(wnd))    {
  185. #ifdef INCLUDE_WINDOWOPTIONS
  186.                 int cl = cfg.Texture ? APPLCHAR : ' ';
  187. #else
  188.                 int cl = APPLCHAR;
  189. #endif
  190.                 ClearWindow(wnd, (RECT *)p1, cl);
  191.             }
  192.             return TRUE;
  193.         case COMMAND:
  194.             switch ((int)p1)    {
  195.                 case ID_HELP:
  196.                     DisplayHelp(wnd, DFlatApplication);
  197.                     break;
  198.                 case ID_HELPHELP:
  199.                     DisplayHelp(wnd, "HelpHelp");
  200.                     break;
  201.                 case ID_EXTHELP:
  202.                     DisplayHelp(wnd, "ExtHelp");
  203.                     break;
  204.                 case ID_KEYSHELP:
  205.                     DisplayHelp(wnd, "KeysHelp");
  206.                     break;
  207.                 case ID_HELPINDEX:
  208.                     DisplayHelp(wnd, "HelpIndex");
  209.                     break;
  210. #ifdef TESTING_DFLAT
  211.                 case ID_LOADHELP:
  212.                     LoadHelpFile();
  213.                     break;
  214. #endif
  215. #ifdef INCLUDE_LOGGING
  216.                 case ID_LOG:
  217.                     MessageLog(wnd);
  218.                     break;
  219. #endif
  220. #ifdef INCLUDE_SHELLDOS
  221.                 case ID_DOS:
  222.                     ShellDOS(wnd);
  223.                     return TRUE;
  224. #endif
  225.                 case ID_EXIT:
  226.                 case ID_SYSCLOSE:
  227.                     PostMessage(wnd, CLOSE_WINDOW, 0, 0);
  228.                     break;
  229.                 case ID_DISPLAY:
  230.                     if (DialogBox(wnd, &Display, TRUE, NULL))    {
  231.                         SendMessage(wnd, HIDE_WINDOW, 0, 0);
  232.                         SelectColors(wnd);
  233.                         SelectLines(wnd);
  234. #ifdef INCLUDE_WINDOWOPTIONS
  235.                         SelectBorder(wnd);
  236.                         SelectTitle(wnd);
  237.                         SelectStatusBar(wnd);
  238.                         SelectTexture();
  239. #endif
  240.                         CreateMenu(wnd);
  241.                         CreateStatusBar(wnd);
  242.                         SendMessage(wnd, SHOW_WINDOW, 0, 0);
  243.                     }
  244.                     break;
  245.                 case ID_SAVEOPTIONS:
  246.                     SaveConfig();
  247.                     break;
  248. #ifdef INCLUDE_MULTI_WINDOWS
  249.                 case ID_WINDOW:
  250.                     ChooseWindow(wnd, (int)p2-2);
  251.                     break;
  252.                 case ID_CLOSEALL:
  253.                     CloseAll(wnd);
  254.                     break;
  255.                 case ID_MOREWINDOWS:
  256.                     MoreWindows(wnd);
  257.                     break;
  258. #endif
  259. #ifdef INCLUDE_RESTORE
  260.                 case ID_SYSRESTORE:
  261. #endif
  262.                 case ID_SYSMOVE:
  263.                 case ID_SYSSIZE:
  264. #ifdef INCLUDE_MINIMIZE
  265.                 case ID_SYSMINIMIZE:
  266. #endif
  267. #ifdef INCLUDE_MAXIMIZE
  268.                 case ID_SYSMAXIMIZE:
  269. #endif
  270.                     return BaseWndProc(APPLICATION, wnd, msg, p1, p2);
  271.                 default:
  272.                     if (inFocus != wnd->MenuBarWnd && inFocus != wnd)
  273.                         PostMessage(inFocus, msg, p1, p2);
  274.                     break;
  275.             }
  276.             return TRUE;
  277.         case CLOSE_WINDOW:    {
  278.             char exmsg[80];
  279.             sprintf(exmsg, "Exit %s?", DFlatApplication);
  280.             if (!YesNoBox(exmsg))
  281.                 return FALSE;
  282. #ifdef INCLUDE_MULTI_WINDOWS
  283.             CloseAll(wnd);
  284. #endif
  285.             PostMessage(NULL, STOP, 0, 0);
  286.             rtn = BaseWndProc(APPLICATION, wnd, msg, p1, p2);
  287.             if (ScreenHeight != SCREENHEIGHT)
  288.                 SetScreenHeight(ScreenHeight);
  289.             UnLoadHelpFile();
  290.             SendMessage(NULL, HIDE_MOUSE, 0, 0);
  291.             return rtn;
  292.         }
  293.         default:
  294.             break;
  295.     }
  296.     return BaseWndProc(APPLICATION, wnd, msg, p1, p2);
  297. }
  298.  
  299. #ifdef INCLUDE_SHELLDOS
  300. static void SwitchCursor(void)
  301. {
  302.     SendMessage(NULL, SAVE_CURSOR, 0, 0);
  303.     SwapCursorStack();
  304.     SendMessage(NULL, RESTORE_CURSOR, 0, 0);
  305. }
  306.  
  307. /* ------- Shell out to DOS ---------- */
  308. static void ShellDOS(WINDOW wnd)
  309. {
  310.     SendMessage(wnd, HIDE_WINDOW, 0, 0);
  311.     SwitchCursor();
  312.     if (ScreenHeight != SCREENHEIGHT)
  313.         SetScreenHeight(ScreenHeight);
  314.     SendMessage(NULL, HIDE_MOUSE, 0, 0);
  315.     printf("To return to %s, execute the DOS exit command.",
  316.                     DFlatApplication);
  317.     spawnl(P_WAIT, getenv("COMSPEC"), NULL);
  318.     if (SCREENHEIGHT != cfg.ScreenLines)
  319.         SetScreenHeight(cfg.ScreenLines);
  320.     SwitchCursor();
  321.     SendMessage(wnd, SHOW_WINDOW, 0, 0);
  322.     SendMessage(NULL, SHOW_MOUSE, 0, 0);
  323. }
  324. #endif
  325.  
  326. static void CreateMenu(WINDOW wnd)
  327. {
  328.     AddAttribute(wnd, HASMENUBAR);
  329.     if (wnd->MenuBarWnd != NULL)
  330.         SendMessage(wnd->MenuBarWnd, CLOSE_WINDOW, 0, 0);
  331.     wnd->MenuBarWnd = CreateWindow(MENUBAR,
  332.                         NULL,
  333.                         GetClientLeft(wnd),
  334.                         GetClientTop(wnd)-1,
  335.                         1,
  336.                         ClientWidth(wnd),
  337.                         NULL,
  338.                         wnd,
  339.                         NULL,
  340.                         0);
  341.     SendMessage(wnd->MenuBarWnd, BUILDMENU, (PARAM) wnd->extension, 0);
  342.     AddAttribute(wnd->MenuBarWnd, VISIBLE);
  343. }
  344.  
  345. static void CreateStatusBar(WINDOW wnd)
  346. {
  347.     if (wnd->StatusBar != NULL)    {
  348.         SendMessage(wnd->StatusBar, CLOSE_WINDOW, 0, 0);
  349.         wnd->StatusBar = NULL;
  350.     }
  351.     if (TestAttribute(wnd, HASSTATUSBAR))    {
  352.         wnd->StatusBar = CreateWindow(STATUSBAR,
  353.                             NULL,
  354.                             GetClientLeft(wnd),
  355.                             GetBottom(wnd),
  356.                             1,
  357.                             ClientWidth(wnd),
  358.                             NULL,
  359.                             wnd,
  360.                             NULL,
  361.                             SAVESELF);
  362.         AddAttribute(wnd->StatusBar, VISIBLE);
  363.     }
  364. }
  365.  
  366. #ifdef INCLUDE_MULTI_WINDOWS
  367.  
  368. static char *Menus[9] = {
  369.     "~1.                      ",
  370.     "~2.                      ",
  371.     "~3.                      ",
  372.     "~4.                      ",
  373.     "~5.                      ",
  374.     "~6.                      ",
  375.     "~7.                      ",
  376.     "~8.                      ",
  377.     "~9.                      "
  378. };
  379.  
  380. static int WindowSel;
  381.  
  382. static char *WindowName(WINDOW wnd)
  383. {
  384.     if (GetTitle(wnd) == NULL)    {
  385.         if (GetClass(wnd) == DIALOG)
  386.             return ((DBOX *)(wnd->extension))->HelpName;
  387.         else 
  388.             return "Untitled";
  389.     }
  390.     else
  391.         return GetTitle(wnd);
  392. }
  393.  
  394. static WINDOW oldFocus;
  395.  
  396. void PrepWindowMenu(void *w, struct Menu *mnu)
  397. {
  398.     WINDOW wnd = w;
  399.     struct PopDown *p0 = mnu->Selections;
  400.     struct PopDown *pd = mnu->Selections + 2;
  401.     struct PopDown *ca = mnu->Selections + 13;
  402.     int MenuNo = 0;
  403.     WINDOW wnd1 = NULL;
  404.     mnu->Selection = 0;
  405.     oldFocus = NULL;
  406.     if (GetClass(wnd) != APPLICATION)    {
  407.         oldFocus = wnd;
  408.         wnd1 = Built.FirstWindow;
  409.         while (wnd1 != NULL && MenuNo < 9)    {
  410.             if (GetClass(wnd1) != MENUBAR &&
  411.                     GetClass(wnd1) != STATUSBAR &&
  412.                         GetParent(wnd1) == GetParent(wnd))    {
  413.                 strncpy(Menus[MenuNo]+4, WindowName(wnd1), 20);
  414.                 pd->SelectionTitle = Menus[MenuNo];
  415.                 if (wnd1 == oldFocus)    {
  416.                     pd->Attrib |= CHECKED;
  417.                     mnu->Selection = MenuNo+2;
  418.                 }
  419.                 else
  420.                     pd->Attrib &= ~CHECKED;
  421.                 pd++;
  422.                 MenuNo++;
  423.             }
  424.             wnd1 = NextWindowBuilt(wnd1);
  425.         }
  426.     }
  427.     if (MenuNo)
  428.         p0->SelectionTitle = "~Close all";
  429.     else
  430.         p0->SelectionTitle = NULL;
  431.     if (wnd1 != NULL)    {
  432.         *pd++ = *ca;
  433.         if (mnu->Selection == 0)
  434.             mnu->Selection = 11;
  435.     }
  436.     pd->SelectionTitle = NULL;
  437. }
  438.  
  439. static int WindowPrep(WINDOW wnd, MESSAGE msg, PARAM p1, PARAM p2)
  440. {
  441.     switch (msg)    {
  442.         case INITIATE_DIALOG:    {
  443.             WINDOW wnd1 = Built.FirstWindow;
  444.             WINDOW cwnd = ControlWindow(&Windows, ID_WINDOWLIST);
  445.             int sel = 0;
  446.             if (cwnd == NULL)
  447.                 return FALSE;
  448.             while (wnd1 != NULL)    {
  449.                 if (GetClass(wnd1) != MENUBAR &&
  450.                         GetClass(wnd1) != STATUSBAR &&
  451.                             GetParent(wnd1) == GetParent(wnd) &&
  452.                                 wnd1 != wnd)    {
  453.                     if (wnd1 == oldFocus)
  454.                         WindowSel = sel;
  455.                     SendMessage(cwnd, ADDTEXT, (PARAM) WindowName(wnd1), 0);
  456.                     sel++;
  457.                 }
  458.                 wnd1 = NextWindowBuilt(wnd1);
  459.             }
  460.             SendMessage(cwnd, LB_SETSELECTION, WindowSel, 0);
  461.             AddAttribute(cwnd, VSCROLLBAR);
  462.             PostMessage(cwnd, SHOW_WINDOW, 0, 0);
  463.             break;
  464.         }
  465.         case COMMAND:
  466.             switch ((int) p1)    {
  467.                 case ID_OK:
  468.                     if ((int)p2 == 0)
  469.                         WindowSel = SendMessage(ControlWindow(&Windows,
  470.                                     ID_WINDOWLIST),
  471.                                     LB_CURRENTSELECTION, 0, 0);
  472.                     break;
  473.                 case ID_WINDOWLIST:
  474.                     if ((int) p2 == LB_CHOOSE)
  475.                         SendMessage(wnd, COMMAND, ID_OK, 0);
  476.                     break;
  477.                 default:
  478.                     break;
  479.             }
  480.             break;
  481.         default:
  482.             break;
  483.     }
  484.     return DefaultWndProc(wnd, msg, p1, p2);
  485. }
  486.  
  487. static void MoreWindows(WINDOW wnd)
  488. {
  489.     if (DialogBox(wnd, &Windows, TRUE, WindowPrep))
  490.         ChooseWindow(wnd, WindowSel);
  491. }
  492.  
  493. static void ChooseWindow(WINDOW wnd, int WindowNo)
  494. {
  495.     WINDOW wnd1 = GetFirstChild(wnd);
  496.     while (wnd1 != NULL)    {
  497.         if (GetClass(wnd1) != MENUBAR && GetClass(wnd1) != STATUSBAR)
  498.             if (WindowNo-- == 0)
  499.                 break;
  500.         wnd1 = GetNextChild(wnd, wnd1);
  501.     }
  502.     if (wnd1 != NULL)    {
  503.         SendMessage(wnd1, SETFOCUS, TRUE, 0);
  504.         if (wnd1->condition == ISMINIMIZED)
  505.             SendMessage(wnd1, RESTORE, 0, 0);
  506.     }
  507. }
  508.  
  509. static void CloseAll(WINDOW wnd)
  510. {
  511.     WINDOW wnd1 = GetLastChild(wnd);
  512.     SendMessage(wnd, SETFOCUS, TRUE, 0);
  513.     while (wnd1 != NULL)    {
  514.         if (GetClass(wnd1) == MENUBAR || GetClass(wnd1) == STATUSBAR)
  515.             wnd1 = GetPrevChild(wnd, wnd1);
  516.         else    {
  517.             ClearVisible(wnd1);
  518.             SendMessage(wnd1, CLOSE_WINDOW, 0, 0);
  519.             wnd1 = GetLastChild(wnd);
  520.         }
  521.     }
  522.     SendMessage(wnd, PAINT, 0, 0);
  523. }
  524.  
  525. #endif    /* #ifdef INCLUDE_MULTI_WINDOWS */
  526.  
  527. static void DoWindowColors(WINDOW wnd)
  528. {
  529.     WINDOW cwnd = Built.FirstWindow;
  530.     InitWindowColors(wnd);
  531.     while (cwnd != NULL)    {
  532.         InitWindowColors(cwnd);
  533.         if (GetClass(cwnd) == TEXT && GetText(cwnd) != NULL)
  534.             SendMessage(cwnd, CLEARTEXT, 0, 0);
  535.         cwnd = NextWindowBuilt(cwnd);
  536.     }
  537. }
  538.  
  539. static void SelectColors(WINDOW wnd)
  540. {
  541.     if (RadioButtonSetting(&Display, ID_MONO))
  542.         cfg.mono = 1;
  543.     else if (RadioButtonSetting(&Display, ID_REVERSE))
  544.         cfg.mono = 2;
  545.     else
  546.         cfg.mono = 0;
  547.     if ((ismono() || video_mode == 2) && cfg.mono == 0)
  548.         cfg.mono = 1;
  549.  
  550.     if (cfg.mono == 1)
  551.         memcpy(cfg.clr, bw, sizeof bw);
  552.     else if (cfg.mono == 2)
  553.         memcpy(cfg.clr, reverse, sizeof reverse);
  554.     else
  555.         memcpy(cfg.clr, color, sizeof color);
  556.     DoWindowColors(wnd);
  557. }
  558.  
  559. static void SelectLines(WINDOW wnd)
  560. {
  561.     cfg.ScreenLines = 25;
  562.     if (isEGA() || isVGA())    {
  563.         if (RadioButtonSetting(&Display, ID_43LINES))
  564.             cfg.ScreenLines = 43;
  565.         else if (RadioButtonSetting(&Display, ID_50LINES))
  566.             cfg.ScreenLines = 50;
  567.     }
  568.     if (SCREENHEIGHT != cfg.ScreenLines)    {
  569.         int FullScreen = WindowHeight(wnd) == SCREENHEIGHT;
  570.         SetScreenHeight(cfg.ScreenLines);
  571.         if (FullScreen || SCREENHEIGHT-1 < GetBottom(wnd))
  572.             SendMessage(wnd, SIZE, (PARAM) GetRight(wnd),
  573.                 SCREENHEIGHT-1);
  574.     }
  575. }
  576.  
  577. static void SetScreenHeight(int height)
  578. {
  579.     if (isEGA() || isVGA())    {
  580.         SendMessage(NULL, SAVE_CURSOR, 0, 0);
  581.         switch (height)    {
  582.             case 25:
  583.                 Set25();
  584.                 break;
  585.             case 43:
  586.                 Set43();
  587.                 break;
  588.             case 50:
  589.                 Set50();
  590.                 break;
  591.             default:
  592.                 break;
  593.         }
  594.         SendMessage(NULL, RESTORE_CURSOR, 0, 0);
  595.         SendMessage(NULL, RESET_MOUSE, 0, 0);
  596.         SendMessage(NULL, SHOW_MOUSE, 0, 0);
  597.     }
  598. }
  599.  
  600. #ifdef INCLUDE_WINDOWOPTIONS
  601.  
  602. static void SelectTexture(void)
  603. {
  604.     cfg.Texture = CheckBoxSetting(&Display, ID_TEXTURE);
  605. }
  606.  
  607. static void SelectBorder(WINDOW wnd)
  608. {
  609.     cfg.Border = CheckBoxSetting(&Display, ID_BORDER);
  610.     if (cfg.Border)
  611.         AddAttribute(wnd, HASBORDER);
  612.     else
  613.         ClearAttribute(wnd, HASBORDER);
  614. }
  615.  
  616. static void SelectStatusBar(WINDOW wnd)
  617. {
  618.     cfg.StatusBar = CheckBoxSetting(&Display, ID_STATUSBAR);
  619.     if (cfg.StatusBar)
  620.         AddAttribute(wnd, HASSTATUSBAR);
  621.     else
  622.         ClearAttribute(wnd, HASSTATUSBAR);
  623. }
  624.  
  625. static void SelectTitle(WINDOW wnd)
  626. {
  627.     cfg.Title = CheckBoxSetting(&Display, ID_TITLE);
  628.     if (cfg.Title)
  629.         AddAttribute(wnd, HASTITLEBAR);
  630.     else
  631.         ClearAttribute(wnd, HASTITLEBAR);
  632. }
  633.  
  634. #endif    /* #ifdef INCLUDE_WINDOWOPTIONS */
  635.